package org.su.generalmvc;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

public interface IModel {
	public static final String KEY_REDIRECT = "redirect";
	
	public static final String MODEL_DATA = "model_data";

	/**
	 * 添加全局错误的信息
	 * 
	 * @param key
	 * @param value
	 * @return
	 */
	public abstract String addGlobalErrors(String key, String value);

	/**
	 * 得到指定的全局错误信息
	 * 
	 * @param key
	 * @return
	 */
	public abstract String getGlobalErrors(Object key);

	/**
	 * 添加字段错误的信息
	 * 
	 * @param key
	 * @param value
	 * @return
	 */
	public abstract String addFieldErrors(String key, String value);

	/**
	 * 得到指定的字段错误信息
	 * 
	 * @param key
	 * @return
	 */
	public abstract String getFieldErrors(Object key);

	/**
	 * 判断是否有错误信息
	 * 
	 * @return
	 */
	public abstract boolean isEmpty();

	/**
	 * 返回字段错误map
	 * 
	 * @return
	 */
	public abstract HashMap<String, String> getFieldErrors();

	/**
	 * 返回全局错误map
	 * 
	 * @return
	 */
	public abstract HashMap<String, String> getGlobalErrors();

	/**
	 * 加入全局提示信息
	 * 
	 * @param info
	 */
	public abstract void addInfo(String info);

	/**
	 * 加入全局警告信息
	 * 
	 * @param info
	 */
	public abstract void addWarning(String info);

	/**
	 * 加入全局错误信息
	 * 
	 * @param info
	 */
	public abstract void addError(String info);

	/**
	 * 加入全局提示信息
	 * 
	 * @param msg
	 */
	public abstract void addSuccess(String msg);

	/**
	 * 设置单个数据
	 * 
	 * @param json
	 */
	public abstract void setData(Object json);

	/**
	 * 添加数据
	 * 
	 * @param key
	 * @param value
	 */
	public abstract void addData(String key, Object value);

	/**
	 * 得到所有模板信息
	 * @return
	 */
	public abstract Map<String, ?> getModel();

	/**
	 * 设置前台网页重定向地址
	 * 
	 * @param url
	 */
	public abstract void setRedirect(String url);
	
	public void clear();
	
	/**
	 * 等同于addData添加数据
	 * 
	 * @param key
	 * @param value
	 */
	public void put(String key, Object value);
	
	
	public Object get(String key);
	
	
	public boolean isError();
	
	/**
	 * 设置输入流
	 * @param in
	 */
	public void setInputStream(InputStream in);
	
	/**
	 * 获取输入流
	 * @return
	 */
	public InputStream getInputStream();
}